The present invention relates to a structured algorithmic programming language approach to system design. For a design unit, algorithmic programming language techniques simplify the specification of the interface and sub-design unit concurrency. A design tool interprets a structured programming language specification for the design unit and produces an equivalent lower-level specification coded, for example, in a hardware description language such as VHDL.
Computer hardware such as an electronic circuit can include thousands or even millions of tiny components. Designing computer hardware at the level of these tiny components is time-consuming and costly. Therefore, hardware designers often use design tools to simplify and speed up the process of designing computer hardware.
When using a design tool, a designer specifies a design unit in a way that abstracts away certain hardware details. For example, the designer might specify the overall behavior, timing, and structure of the design unit, while ignoring the actual low-level hardware components of the design unit. The design tool then transforms the higher-level specification into a lower-level specification that is closer to an actual hardware implementation. By shielding the designer from many of the complexities of the design unit, the design tool makes the design process shorter and more cost effective.
A design tool typically accepts a specification written in a hardware description language [xe2x80x9cHDLxe2x80x9d] such as VHDL or VERILOG(copyright). A HDL is a language for specifying computer hardware. Most HDLs include specialized constructs and libraries that the designer uses to explicitly specify timing and structural details. Different design tools and HDLs work at different levels of abstraction. For example, behavioral synthesis tools and behavioral HDLs work at a relatively high level of abstraction. Even at a relatively high level of abstraction, however, the syntax of HDLs is awkward and using HDLs requires extensive training. For additional information about electronic design automation, behavioral synthesis tools, and HDLs, see John P. Elliott, Understanding Behavioral Synthesis, Kluwer Academic Publishers (1999).
Because HDLs are awkward and hard to learn, there is great interest in alternative design approaches that accept specifications as conceived by designers.
Designers are often familiar with a software programming language such as C or C++. To test the algorithmic behavior of a design unit, a designer might code a system-level specification for the design unit using a programming language. Converting the system-level specification into a HDL specification can be problematic, however. The system-level specification typically exists at a higher level of abstraction than the HDL specification and does not require or include details specifying hardware structure and concurrency. Moreover, the system-level specification can include software constructs (for example, pointers) that are difficult to translate to a hardware counterpart.
One way to overcome these difficulties is to make a programming language more HDL-like. For example, some design approaches start with a programming language such as C, and then add support libraries or impose HDL-like conventions, classes, and syntax on the programming language. Rather than simplify system design, these design approaches in effect force the designer to learn another HDL.
U.S. Pat. No. 6,226,776 [xe2x80x9cthe ""776 patentxe2x80x9d] describes another programming language design approach. The ""776 patent describes specification of a design unit in a standard programming language (for example, ANSI C) without the use of specialized constructs and additional libraries. The ""776 patent does not, however, describe an adequate way for a designer to include structurally meaningful organization in a programming language specification at the same time.
Thus, current programming language design approaches fail to realize the potential of a programming language approach to system design.
The present invention relates to a structured, algorithmic programming language approach to system design. The design approach enables design, synthesis, and validation of structured, system-level specifications, and integrates system-level design into the rest of the design process. This makes the design process easier for system designers to learn and use, reduces the effort required to translate a system-level specification, and allows for fast, efficient simulation.
The algorithmic programming language design approach includes various techniques and tools, which can be used in combination or independently.
According to a first aspect of the design approach, the design approach operates at the algorithmic level of abstraction familiar to system-level designers, and does not require specialized syntax or constructs, training with additional libraries, or familiarity with hardware design. Thus, the design approach is intuitive to system designers. At the same time, the design approach is structured, and a programming language specification includes structurally meaningful organization. For example, the design approach includes techniques and tools for simplifying specification of a design unit interface in a programming language specification and/or simplifying specification of synchronization and sub-design unit concurrency for a design unit.
According to a second aspect of the design approach, the design approach leverages existing simulation technology for validation of a programming language specification at various stages of the design flow. For example, the design approach enables validation of the design unit at early stages in the design flow, which makes testing and debugging faster. The design approach also enables simulation of a programming language specification with pre-existing specifications and testbenches written in a HDL.
According to a third aspect of the design approach, a design tool synthesizes a programming language specification into a lower-level specification, for example, translating from the programming language to a HDL and embedding architectural details. The design tool thus simplifies the translation of an algorithmic, system-level specification to a lower-level specification. Because the programming language specification follows a structured programming language approach, the design tool interprets the programming language specification as having structural significance. For example, the design tool interprets an interface in a programming language specification as specifying a design unit interface in HDL. Or, based upon structural relationships implied in the programming language specification, the design tool generates code for handling sub-design unit concurrency and synchronization.